/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.actions.problemas;

import com.itextpdf.text.DocumentException;
import com.mapping.CambioComp;
import com.mapping.CambioCompPK;
import com.mapping.Componentes;
import com.mapping.Dispositivo;
import com.mapping.Empleado;
import com.mapping.ReporteSolucion;
import com.mapping.Sla;
import com.mapping.Solucion;
import com.mapping.Ticket;
import com.opensymphony.xwork2.ActionSupport;
import com.session.Session;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ServletRequestAware;
/**
 *
 * @author Andres
 */
@Namespace(value = "/")
@Action(value = "altaSolucion", results = {@Result(name = "success", location = "/GestionProblemas/rAltaSolucion.jsp")})
public class AltaSolucionAction extends ActionSupport implements ServletRequestAware{
    private String idTicket;
    private String tipoSolucion;
    private String idComponente;
    private String causa;
    private String solucion;
    private String idTicketSolucion;
    private String rutaArchivo;
    private String idSla;
    private HttpServletRequest request;
    
    @Override
    public String execute(){
        Session s = (Session) request.getSession().getAttribute("Sesion");
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("inventarios");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
            Ticket ticket = em.getReference(Ticket.class, idTicket);
            Empleado emp = em.getReference(Empleado.class, s.getEmpleado().getIdEmpleado());
            ticket.setTipoProblema(tipoSolucion);
            Solucion solution = null;
            switch(tipoSolucion){
                case "RFC":
                    CambioComp cambio = new CambioComp();
                    Componentes comp =  em.getReference(Componentes.class, Integer.parseInt(idComponente));
                    CambioCompPK ccpk = new CambioCompPK(ticket.getIdTicket(), comp.getId());
                    cambio.setTicket(ticket);
                    cambio.setComponentes(comp);
                    cambio.setCambioCompPK(ccpk);
                    em.persist(cambio);
                    
                    solution = new Solucion();
                    solution.setCausa(causa);
                    solution.setSolucion(solucion);
                    solution.setEmpResolvio(emp);
                    solution.setIdSla(em.getReference(Sla.class, Integer.parseInt(idSla)));
                    em.persist(solution);
                    break;
                case "SN":
                    solution = new Solucion();
                    solution.setCausa(causa);
                    solution.setSolucion(solucion);
                    solution.setEmpResolvio(emp);
                    solution.setIdSla(em.getReference(Sla.class, Integer.parseInt(idSla)));
                    em.persist(solution);
                    ticket.setEstado("cerrado");
                    break;
                case "CMDB":
                    Ticket ticketSolucion = em.getReference(Ticket.class, idTicketSolucion);
                    solution = ticketSolucion.getIdSolucion();
                    if(ticketSolucion.getTipoProblema().equals("RFC")){
                        System.out.println("Here ->"+ticketSolucion.getCambioCompCollection().toArray()[0]);
                        CambioComp cambioCompSolucion = (CambioComp)ticketSolucion.getCambioCompCollection().toArray()[0];
                        Componentes compSolucion = cambioCompSolucion.getComponentes();
                        Dispositivo disp = ticket.getIdDispositivo();
                        List<Componentes>  listaComp = (List<Componentes>) disp.getComponentesCollection();
                        Componentes comp1 = null;
                        for(Componentes c : listaComp){
                            if( c.getIdTipo().getTipo().equals(compSolucion.getIdTipo().getTipo())){
                                comp1 = c;
                            }
                        }
                        CambioComp cambio1 = new CambioComp();
                        CambioCompPK ccpk1 = new CambioCompPK(ticket.getIdTicket(), comp1.getId());
                        cambio1.setComponentes(comp1);
                        cambio1.setTicket(ticket);
                        cambio1.setCambioCompPK(ccpk1);
                        em.persist(cambio1);
                        ticket.setTipoProblema("RFC");
                    }else{ 
                       ticket.setEstado("cerrado"); 
                    }
                    break;    
            }
            ticket.setEmpResolvio(emp);
            ticket.setIdSolucion(solution);
            em.flush();
        tx.commit();
 
        
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        DateFormat dateFormat2 = new SimpleDateFormat("ddMMyyyy");
        Date date = new Date();
        String ruta = request.getSession().getServletContext().getRealPath("/")+"\\ReportesSoluciones";
        String fecha = dateFormat.format(date);
        String nombreArchivo = ticket.getIdTicket()+"_"+dateFormat2.format(date)+".pdf";
        rutaArchivo = "ReportesSoluciones/"+nombreArchivo;
        ReporteSolucionPDF reporte = new ReporteSolucionPDF(ticket, ticket.getIdDispositivo(),ticket.getIdSolucion(), 
                fecha, ruta, nombreArchivo);
        try {    
            reporte.generar();
        } catch (DocumentException | IOException de) {
            ruta = de.getMessage();
        }
        tx.begin();
        ReporteSolucion rs = new ReporteSolucion();
        rs.setIdSolucion(ticket.getIdSolucion());
        rs.setArchivo(rutaArchivo);
        em.persist(rs);
        em.flush();
        tx.commit();
        em.close();
        
        return SUCCESS;
    }

    public void setIdTicket(String idTicket) {
        this.idTicket = idTicket;
    }

    public void setTipoSolucion(String tipoSolucion) {
        this.tipoSolucion = tipoSolucion;
    }

    public void setIdComponente(String idComponente) {
        this.idComponente = idComponente;
    }

    public void setCausa(String causa) {
        this.causa = causa;
    }

    public void setSolucion(String solucion) {
        this.solucion = solucion;
    }

    public void setIdTicketSolucion(String idTicketSolucion) {
        this.idTicketSolucion = idTicketSolucion;
    }

    public void setRutaArchivo(String rutaArchivo) {
        this.rutaArchivo = rutaArchivo;
    }

    public void setIdSla(String idSla) {
        this.idSla = idSla;
    }

    public String getRutaArchivo() {
        return rutaArchivo;
    }
    
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;  
    }
}
